Why am I passionate about this?

My life has been about programming for as long as I can remember. Learning to code was a way to connect with my dad and express my creativity at a young age. Since I grew up with code, it became the way I understood the world; often I could look at a process or program and immediately see its source code in my mind. I developed a very strong sense of aesthetics searching for “perfect code,” which for me was code that was not only error-free but resistant to errors. My studies, research, and career is about moving myself and all programmers closer to that goal: Software that never fails.


I wrote

Five Lines of Code

By Christian Clausen,

Book cover of Five Lines of Code

What is my book about?

Improving existing code—refactoring—is one of the most common tasks you’ll face as a programmer. Five Lines of Code teaches you…

Shepherd is reader supported. When you buy books, we may earn an affiliate commission.

The books I picked & why

Book cover of Structure and Interpretation of Computer Programs

Christian Clausen Why did I love this book?

After providing a thorough introduction to its language of choice (Scheme) it quickly demonstrates how make interesting non-trivial programs such as your own square root function or a symbolic differentiation tool, and that's just chapter 1.

All-in-all solid introduction to functional programming, or just programming in general.

By Harold Abelson, Gerald Jay Sussman, Julie Sussman

Why should I read it?

2 authors picked Structure and Interpretation of Computer Programs as one of their favorite books, and they share why you should read it.

What is this book about?

As others have gone into, this is a great programming book for many reasons, and is a must-read for anyone who is interested in software design. Rather than waste time reaffirming the excellent positive reviews of this book, I wanted to cover something that I have not seen in the reviews: namely that there are multiple publishers for this book (as it is an "open source" book). At the time of writing, there is this McGraw-Hill publication, and, for 40% less, an MIT press edition. While I have not seen the McGraw-Hill version in person to see what quality benefits…


Book cover of Types and Programming Languages

Christian Clausen Why did I love this book?

Having worked with an untyped functional language the next logical step is to add types on top, and how to get a better understanding than by implementing the type system yourself.

This book takes you through all the interesting kinds and variations of type systems, and you get to implement them yourself using one of my absolute favorite languages (OCaml).

By Benjamin C. Pierce,

Why should I read it?

1 author picked Types and Programming Languages as one of their favorite books, and they share why you should read it.

What is this book about?

A comprehensive introduction to type systems and programming languages.

A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of type systems—and of programming languages from a type-theoretic perspective—has important applications in software engineering, language design, high-performance compilers, and security.

This text provides a comprehensive introduction both to type systems in computer science and to the basic theory of programming languages. The approach is pragmatic and operational; each new concept is motivated by programming examples and the more theoretical sections…


Book cover of Distributed Algorithms An Intuitive Approach

Christian Clausen Why did I love this book?

The building blocks of software are algorithms, so here our journey continues after you have established a deep understanding of programming languages.

Modern software is predominantly distributed, and since this book doesn't assume much it is the perfect introduction to algorithm analysis, concurrency, and distributed systems. And the best part is that you can just jump in and build these algorithms yourself.

By Fokkink,

Why should I read it?

1 author picked Distributed Algorithms An Intuitive Approach as one of their favorite books, and they share why you should read it.

What is this book about?

The new edition of a guide to distributed algorithms that emphasizes examples and exercises rather than the intricacies of mathematical models.

This book offers students and researchers a guide to distributed algorithms that emphasizes examples and exercises rather than the intricacies of mathematical models. It avoids mathematical argumentation, often a stumbling block for students, teaching algorithmic thought rather than proofs and logic. This approach allows the student to learn a large number of algorithms within a relatively short span of time. Algorithms are explained through brief, informal descriptions, illuminating examples, and practical exercises. The examples and exercises allow readers to…


Book cover of Beautiful Code

Christian Clausen Why did I love this book?

Continuing down the engineering part of this mini-curriculum, we have a collection of interesting ideas, each written by a different author, all of them inspiring.

Some of the chapters in this book I have reread more times than I can count, because the ideas are so original and intriguing that my fingers start to tingle.

By Andy Oram, Greg Wilson,

Why should I read it?

1 author picked Beautiful Code as one of their favorite books, and they share why you should read it.

What is this book about?

How do the experts solve difficult problems in software development? In this unique and insightful book, leading computer scientists offer case studies that reveal how they found unusual, carefully designed solutions to high-profile projects. You will be able to look over the shoulder of major coding and design experts to see problems through their eyes. This is not simply another design patterns book, or another software engineering treatise on the right and wrong way to do things. The authors think aloud as they work through their project's architecture, the tradeoffs made in its construction, and when it was important to…


Book cover of Java Puzzlers: Traps, Pitfalls, and Corner Cases

Christian Clausen Why did I love this book?

This tour of programming is a humorous reminder that we should always question our assumptions.

This book presents example after example of very simple Java programs all of which behave differently than you expect. It's both humbling and so provocative that you have to go into an editor and see if their claims are true.

By Joshua Bloch, Neal Gafter,

Why should I read it?

1 author picked Java Puzzlers as one of their favorite books, and they share why you should read it.

What is this book about?

"Every programming language has its quirks. This lively book reveals oddities of the Java programming language through entertaining and thought-provoking programming puzzles."

--Guy Steele, Sun Fellow and coauthor of The Java (TM) Language Specification

"I laughed, I cried, I threw up (my hands in admiration)."

--Tim Peierls, president, Prior Artisans LLC, and member of the JSR 166 Expert Group

How well do you really know Java? Are you a code sleuth? Have you ever spent days chasing a bug caused by a trap or pitfall in Java or its libraries? Do you like brainteasers? Then this is the book for…


Explore my book 😀

Five Lines of Code

By Christian Clausen,

Book cover of Five Lines of Code

What is my book about?

Improving existing code—refactoring—is one of the most common tasks you’ll face as a programmer. Five Lines of Code teaches you clear and actionable refactoring rules that you can apply without relying on intuitive judgements such as “code smells.” Following the author’s expert perspective—that refactoring and code smells can be learned by following a concrete set of principles—you’ll learn when to refactor your code, what patterns to apply to what problem, and the code characteristics that indicate it’s time for a rework.

5 book lists we think you will like!

Interested in algorithms, computer programming, and object-oriented programming?

Algorithms 36 books